// // 给定一个链表，判断链表中是否有环。如果有环，返回 1，否则返回 0。
// //此时链表的元素为 3 2 0 -4，然后-4的next指向2
// #include <stdio.h>
// #include <stdlib.h>
// #include "windows.h"
// #include <assert.h>
// typedef int ElemType;
// //节点结构
// typedef struct LinkNode {
//     ElemType data;
//     struct LinkNode* next;
// }LinkNode;
// //链表结构
// typedef struct LinkList {
//     LinkNode* head;
// }LinkList;
// //链表初始化
// LinkList* LinkInit() {
//     LinkList* list=(LinkList*)malloc(sizeof(LinkList));
//     list->head=(LinkNode*)malloc(sizeof(LinkNode));
//     list->head->next=NULL;
//     return list;
// }
//
// // 插入节点到链表尾部
// void LinkInsert(LinkList* list,ElemType data) {
//     LinkNode* newNode=(LinkNode*)malloc(sizeof(LinkNode));
//     if(newNode==NULL) {
//         perror("malloc");
//     }
//     newNode->data=data;
//     newNode->next=NULL;
//     LinkNode* current=list->head;
//     while (current->next!=NULL) {
//         current=current->next;
//     }
//     current->next=newNode;
// }
// //头插法
// void LinkHeadInsert(LinkList* list,ElemType data) {
//     LinkNode* newNode=malloc(sizeof(LinkNode));
//     if(newNode==NULL) {
//         perror("malloc");
//     }
//     newNode->data=data;
//     newNode->next=list->head->next;
//     list->head->next=newNode;
// }
//
// //打印链表
// void printLinkList(LinkList* list) {
//     LinkNode* current=list->head->next;
//     while(current!=NULL) {
//         printf("%d ",current->data);
//         current=current->next;
//     }
//     printf("\n");
// }
//
// int Cycle(LinkList* L) {
//     if (L->head->next == NULL) {
//         return 0; // 如果链表为空或只有一个节点，肯定没有环
//     }
//     LinkNode* fast=L->head->next;
//     LinkNode* slow=L->head->next;
//     while (fast!=NULL&&fast->next!=NULL) {//注意先后顺序
//         slow=slow->next;
//         fast=fast->next->next;
//         if(fast==slow) {
//             return 1;
//         }
//     }
//     return 0;
// }
//
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     LinkList* list=LinkInit();
//
//     // 插入数据到链表
//     LinkInsert(list, 3);
//     LinkInsert(list, 2);
//     LinkInsert(list, 0);
//     LinkInsert(list, -4);
//
//     // 判断链表中是否有环
//     if (Cycle(list)) {
//         printf("链表中有环\n");
//     } else {
//         printf("链表中没有环\n");
//     }
//
//     // 创建环
//     LinkNode* current = list->head->next;
//     while (current->next != NULL) {
//         current = current->next;
//     }
//     current->next = list->head->next->next; // -4 的 next 指向 2
//
//     // 判断链表中是否有环
//     if (Cycle(list)) {
//         printf("链表中有环\n");
//     } else {
//         printf("链表中没有环\n");
//     }
//     free(list->head);
//     free(list);
//     return 0;
// }